package com.winhxd.b2c.product.dao;

import com.winhxd.b2c.common.domain.product.condition.ProductStockSkuCondition;
import com.winhxd.b2c.common.domain.product.model.ProductSku;
import com.winhxd.b2c.common.domain.product.model.ProductSpu;
import com.winhxd.b2c.common.domain.product.model.ProductStock;
import com.winhxd.b2c.common.domain.product.vo.ProductShopcarSkuVO;
import com.winhxd.b2c.common.domain.product.vo.ProductSpuIdVO;
import com.winhxd.b2c.common.domain.product.vo.ProductSpuSimpleVO;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

import java.util.List;

/**
 * @author luosixiang
 */
public interface ProductSkuMapper {
    /**
       *  根据主键删除
       * @author luosixiang
       * @date 15:18 2019/1/18
       * @param id
       * @return int
       **/

    int deleteByPrimaryKey(Long id);

    /**
       *  根据spuid删除
       * @author luosixiang
       * @date 15:18 2019/1/18
       * @param id
       * @return int
       **/

    int deleteBySpuId(Long id);

    /**
       *  新增
       * @author luosixiang
       * @date 15:19 2019/1/18
       * @param record
       * @return int
       **/

    int insert(ProductSku record);

    /**
       *  新增
       * @author luosixiang
       * @date 15:19 2019/1/18
       * @param record
       * @return int
       **/

    int insertSelective(ProductSku record);

    /**
       *  根据主键查询
       * @author luosixiang
       * @date 15:19 2019/1/18
       * @param id
       * @return com.winhxd.b2c.common.domain.product.model.ProductSku
       **/

    ProductSku selectByPrimaryKey(Long id);

    /**
       *  根据主键修改
       * @author luosixiang
       * @date 15:19 2019/1/18
       * @param record
       * @return int
       **/

    int updateByPrimaryKeySelective(ProductSku record);

    /**
       *  根据主键修改
       * @author luosixiang
       * @date 15:19 2019/1/18
       * @param record
       * @return int
       **/

    int updateByPrimaryKey(ProductSku record);

    /**
       *  条件查询
       * @author luosixiang
       * @date 15:19 2019/1/18
       * @param record
       * @return java.util.List<com.winhxd.b2c.common.domain.product.model.ProductSku>
       **/

    List<ProductSku> selectByModel(ProductSku record);

    /**
     * 查询商品、某状态下所有sku
     * @param spuId
     * @param status    0.无效，1.有效
     * @return
     */
    List<ProductSku> selectBySpuIdAndStatus(@Param("spuId")Long spuId,@Param("status") Integer status);

    /**
     * 根据价格方案ID,一级spu List集合查询相关信息
     * 使用方:收藏夹、
     * @param priceProgramId
     * @param skuIdList
     * @return
     */
    @MapKey("skuId")
    Map<Long, ProductShopcarSkuVO > selectShopcarSkuList(@Param("priceProgramId") Long priceProgramId, @Param("skuIdList") List<Long> skuIdList);

    /**
     *  根据条件统计数据
     * @auther yuluyuan
     * @date 2019/1/13 14:45
     * @param skuModel
     * @return java.lang.Integer
     */
    Integer countByCondition(ProductSku skuModel);

    /**
     * 通过skuid查询返回spuId
     * @author cuiyueqiang
     * @date 2019/1/12 17:10
     * @param skuIdList
     * @return List<ProductSpuIdVO>
     **/
    List<ProductSpuIdVO> selectSpuIdBySkuList(@Param("skuIdList") List<ProductStockSkuCondition> skuIdList);

    /**
     * ProductStock 中为skuList,spuList,一条sql更新各自库存及销量
     * @author cuiyueqiang
     * @date 2019/1/14 17:19
     * @param productStock
     * @return int
     **/
    int updateProductStock(@Param("productStock") ProductStock productStock);

    /**
     *  根据spuId批量修改
     * @auther yuluyuan
     * @date 2019/1/18 10:10
     * @return int
     * @param record
     */
    int batchUpdateBySpuIds(ProductSku record);
}
